/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.eisti.icc.zk;

import fr.eisti.icc.client.ClientBibliotheque;
import fr.eisti.icc.data.Document;
import java.awt.image.RenderedImage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.Div;
import org.zkoss.zul.Hlayout;
import org.zkoss.zul.Image;
import org.zkoss.zul.Label;
import org.zkoss.zul.Separator;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Vlayout;

/**
 *
 * @author rogers
 */
public class ToolBarButtonController extends Vlayout implements AfterCompose {
    
    private Vlayout toolBarButtonController;
    private Hlayout hlayoutMain;
    private Hlayout docSelected;
    private Hlayout docSelectedItem;
    private Hlayout administration;
    
    
    
    public void afterCompose() {
        Components.wireVariables(this, this);
        Components.addForwards(this, this);
        ClientBibliotheque service= new ClientBibliotheque();
        List<Document> docsInfo = service.getDocumentsByMap_XML(hlayoutMain.getFirstChild().getId(), "sujet=Informatique");
        List<Document> docsMaths = service.getDocumentsByMap_XML(hlayoutMain.getFirstChild().getId(), "sujet=Mathematiques");
        List<Document> docsPhysique = service.getDocumentsByMap_XML(hlayoutMain.getFirstChild().getId(), "sujet=Physique");
        List<Document> docsAnglais = service.getDocumentsByMap_XML(hlayoutMain.getFirstChild().getId(), "sujet=Anglais");
        List<Document> docsAutres = service.getDocumentsByMap_XML(hlayoutMain.getFirstChild().getId(), "sujet=Autres");
        Vlayout vlayout = (Vlayout) toolBarButtonController.getChildren().get(1).getFirstChild();
        
        //Récupération des documents d'info
        if (!docsInfo.isEmpty()){
            
            recuperationDocuments(docsInfo, vlayout, "informatique", "Informatique");
            
        }
        //Récupération des documents de Maths
        if (!docsMaths.isEmpty()){
            
            recuperationDocuments(docsMaths, vlayout, "mathematiques", "Mathematiques");
            
        }
        //Récupération des documents de Physique
        if (!docsPhysique.isEmpty()){
            
            recuperationDocuments(docsPhysique, vlayout, "physique", "Physique");
            
        }
        //Récupération des documents d'anglais
        if (!docsAnglais.isEmpty()){
            
            recuperationDocuments(docsAnglais, vlayout, "anglais", "Anglais");
            
        }
        //Récupération des autres documents
        if (!docsAutres.isEmpty()){
            
            recuperationDocuments(docsAutres, vlayout, "autres", "Autres");
            
        }
    }
    
    private int cpt = 1;
    
    public void afficherDoc(String titre, String auteurs, String editeur, String dateParution, String prixAchat) {
        /**
        Vlayout main = (Vlayout) Path.getComponent("/toolBarButtonController");
        Hlayout docSelected = (Hlayout) main.getParent().getParent().getFellow("docSelected");
        Hlayout docSelectedItem = (Hlayout) main.getParent();
        Hlayout administration = (Hlayout) main.getParent().getParent().getFellow("administration");*/
        
        System.out.println(docSelected.getChildren().size());
        if (docSelected.getChildren().size() > 0) {
            docSelected.removeChild(docSelected.getChildren().get(0));
        }
        /**
        docSelected.appendChild(
                (Vlayout) Executions.createComponents("affichageDocSelectionne.zul", null, null));*/
        
        docSelectedItem.setVisible(false);
        administration.setVisible(false);
        
        Map data = new HashMap();
        data.put("titre", titre);
        data.put("auteurs", auteurs);
        data.put("editeur", editeur);
        data.put("dateParution", dateParution);
        data.put("prixAchat", prixAchat);
        
        Vlayout c = (Vlayout) Executions.createComponents("affichageDocSelectionne.zul", null, data);
        docSelected.appendChild(c);
        
        
        docSelected.setVisible(true);
    }
    
    public void toolbarbuttonClick(String name) {
        
        int tmp = 0;
        cpt++;
        /**
        Vlayout main = (Vlayout) Path.getComponent("/toolBarButtonController").getChildren().get(1).getFirstChild();
        */
        for (Component div : hlayoutMain.getFirstChild().getChildren()) {
            System.out.println(((Div) div).getId());
            if (name.equals(((Div) div).getId())) {
                for (Component hlayout : ((Div) div).getChildren()) {
                    if (hlayout instanceof Hlayout && tmp < cpt) {
                        hlayout.setVisible(true);
                        tmp++;
                    }
                }
            }
        }
  
    }
    
    public void recuperationDocuments(List<Document> docs, Vlayout vlayout, String id, String slabel){
        
        Div division = new Div();
        division.setId(id);

        division.appendChild(new Separator());
        Label label = new Label();
        label.setSclass("selectionLivre");
        label.setValue(slabel); 
        division.appendChild(label);            
        division.appendChild(new Separator());

        Hlayout ligne = new Hlayout();
        ligne.setSpacing("5em");
        for (int i = 1; i<= docs.size(); i++){

            Vlayout vlayDoc = new Vlayout();
                Separator sep = new Separator();
                sep.setBar(true);
                vlayDoc.appendChild(sep);
                Hlayout hlayoutDoc = new Hlayout();
                hlayoutDoc.setWidth("auto");
                    Image imDoc = new Image();
                    imDoc.setWidth("124px");
                    imDoc.setHeight("160px");
                    FileInputStream fis = null;
                    RenderedImage img = null;
                    try {
                        fis = new FileInputStream("/images/" + docs.get(i-1).getCheminImage());
                        img = ImageIO.read(fis);
                        imDoc.setContent(img);
                    } catch (FileNotFoundException ex) {
                        imDoc.setSrc("/images/default.png");
                    } catch (IOException ex) {
                        Logger.getLogger(ToolBarButtonController.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    
                hlayoutDoc.appendChild(imDoc);
                
                    String auteurs = "";

                    List<String> lauteurs = docs.get(i-1).getListAuteurs();
                    for (int j=0; j<lauteurs.size()-1; j++) {
                        auteurs += lauteurs.get(j) + " (Auteur), ";
                    }
                    auteurs += lauteurs.get(lauteurs.size()-1) + " (Auteur)";
                    
                    String editeur = docs.get(i-1).getEditeur() + "(Editeur)";
                    
                    String dateParution = "Date de parution : " + docs.get(i-1).getAnneePublication();
                    
                    Vlayout layoutInfoDoc = new Vlayout();
                        Toolbarbutton tbb = new Toolbarbutton();
                        tbb.setSclass("titre");
                        tbb.setLabel(docs.get(i-1).getTitre());
                        final String titre = tbb.getLabel();
                        final String author = auteurs;
                        final String editor = editeur;
                        final String date = dateParution;
                        final String prixAchat = "Prix : " + docs.get(i-1).getPrixAchat();
                        tbb.addEventListener("onClick", new EventListener() {
                            
                            public void onEvent(Event t) throws Exception {

                                afficherDoc(titre, author, editor, date, prixAchat);

                            }

                        });
//                            Ajouter clic
                        
                        
//                                    <toolbarbutton onClick="toolBarButtonController.afficherDoc()" 
//                                                   sclass="titre" 
//                                                   label="Les design pattern en Java"/> 
                        
                        layoutInfoDoc.appendChild(tbb);
                        layoutInfoDoc.appendChild(new Separator());
                        //Ajout des auteurs
                        Label auteur = new Label();
                        auteur.setSclass("auteur");
                        auteur.setValue(auteurs);
                        layoutInfoDoc.appendChild(auteur);

                        layoutInfoDoc.appendChild(new Separator());

                        Label lediteur = new Label();
                        lediteur.setSclass("editeur");
                        lediteur.setValue(editeur);
                        layoutInfoDoc.appendChild(lediteur);

                        Label parution = new Label();
                        parution.setSclass("parution");
                        parution.setValue(dateParution);
                        layoutInfoDoc.appendChild(parution);

                hlayoutDoc.appendChild(layoutInfoDoc);

            vlayDoc.appendChild(hlayoutDoc);
            Separator sep2 = new Separator();
            sep2.setBar(true);
            vlayDoc.appendChild(sep2);
            ligne.appendChild(vlayDoc);
            
            
            if (i % 3 == 0 && i >= 3 && i < (docs.size())) {

                division.appendChild(ligne);
                division.appendChild(new Separator());
                ligne = new Hlayout();
                ligne.setSpacing("5em");
                ligne.setVisible(false);

            }/* else if (i % 3 == 0 && i == docs.size()) {

                division.appendChild(ligne);
                division.appendChild(new Separator());
                Toolbarbutton plus = new Toolbarbutton();
                plus.setSclass("plus");
                plus.setLabel("+ Plus de livres");
                division.appendChild(plus);
                division.appendChild(new Separator());
                vlayout.appendChild(division);

            }*/

        }

        division.appendChild(ligne);
        division.appendChild(new Separator());
        Toolbarbutton plus = new Toolbarbutton();
        final String idDiv = id;
        System.out.println(idDiv);
        plus.setSclass("plus");
        plus.addEventListener("onClick", new EventListener() {

            public void onEvent(Event t) throws Exception {

                toolbarbuttonClick(idDiv);

            }

        });
        plus.setLabel("+ Plus de livres");
        division.appendChild(plus);
        division.appendChild(new Separator());
        vlayout.appendChild(division);
        
    }
    
}
